package top.whysu.gps.service.system;

import org.springframework.transaction.annotation.Transactional;
import top.whysu.gps.dto.system.SystemConfigDTO;
import top.whysu.gps.exception.BusinessException;

import java.util.List;

/**
 * 系统配置业务类（使用了缓存，修改数据库表后必须重启才起作用）
 */
public interface SystemConfigService {

    /**
     * 初始化系统配置表缓存
     * 缓存预热
     *
     * @throws BusinessException
     */
    void initializeSystemconfigCache() throws BusinessException;

    /**
     * 初始化线程池缓存
     * 缓存预热
     *
     * @throws BusinessException
     */
    void initializeThreadPoolConfigCache() throws BusinessException;

    /**
     * 查询线程池参数配置
     *
     * @param key
     * @return
     */
    String getThreadPoolConfig(String key);

    /**
     * 更新系统配置表缓存
     *
     * @param key
     * @param value
     */
    void newTxUpdateConfig(String key, String value);

    /**
     * 通过接口更新配置信息
     *
     * @param systemConfigDTO
     */
    void updateConfigView(SystemConfigDTO systemConfigDTO);

    /**
     * 获取系统配置表数据
     * <p>
     * 这里直接从缓存中去，不用操作数据库。数据库的操作更新通过updateSystemConfig方法实现
     *
     * @param key
     * @return
     */
    String getConfig(String key);

    /**
     * 批量获取配置信息
     *
     * @param keyList keyList存放的是system_config表中的key值
     * @return
     */
    List<SystemConfigDTO> getConfig(List<String> keyList);

    /**
     * 1.系统配置保存--list
     * 2.更新缓存
     *
     * @param systemConfigDtos
     */
    @Transactional
    void updateConfigList(List<SystemConfigDTO> systemConfigDtos);

    /**
     * 更新系统配置信息
     *
     * @param systemConfigDTO
     */
    int updateThirdConfig(SystemConfigDTO systemConfigDTO) ;

    /**
     * 根据模块获取系统配置
     *
     * @param paramId 模块标识
     * @return
     */
    List<SystemConfigDTO> selectConfigsByParamId(String paramId);

    /**
     * 查询所有参数集合
     */
    List<SystemConfigDTO> selectAllConfigList();

}
